package git


//！提交合并前先把自己的代码打包

//git 分支

//git常用命令
//https://gitee.com/all-about-git
//https://oschina.gitee.io/learn-git-branching/

//https://blog.csdn.net/qq_42956653/article/details/121613703



//4.4 ide中的铁令
//1.切换分支前先提交本地的修改
//2.代码及时提交，提交过了就不会丢
//3.不会回退到某一版本，因为它会导致未提交的文件被删除，选择单个文件-查看历史，一一对比，如果误删，最后的恢复机会是-文件，右键，查看[local history]这是编辑器每隔一段时间会自动备份，最近12h



//如果冲突，则进行协商
//如果同一个文件在合并分支时都被修改了则会引起冲突︰解决的办法是我们可以修改冲突文件后重新提交!选择保留他的代码还是自己的代码
//
//master主分支应该非常稳定，用来发布新版本，一般情况下不允许在上面工作，工作一般情况下在新建的dev分支上工作，工作完后，比如上要发布，或者说dev分支代码稳定后可以合并到主分支master上来。


//#推送分支
//$ git branch v1.0
//$ git push -u origin v1.0



//  git push  [origin|master]
// 			 origin  代表当前用户
//			 master  代表主分支

//分支：不影响正常代码运行，拷贝代码后，修改，修改完后，才是否合并


/*

	master  主分支
	dev     开发版/中分支
	v1.0
	v2.0
		    ...不同版本的分支
	v3.0
        v3.0.1   //标签，细化分支
		v3.0.2

	分支可以合并，但标签不可合并




使用Git下载指定分支命令为：
git clone -b 分支名 仓库地址

例如：
git clone -b dev  https://github.com/xxx.git

将下载分支名为2D-Attention的dev分支仓库。

直接上传会传到当前开发分支去，注意git branch 查看自己的分支






		git分支中常用指令∶

		#列出所有本地分支
		git branch

		#列出所有远程分支
		git branch -r

		#新建一个分支，但依然停留在当前分支
		git branch [branch-name]

		#切换分支
		git checkout [branch-name]

		#新建一个分支，并切换到该分支
		git checkout -b [branch]


		#推送分支
		$ git branch v1.0
		$ git push -u origin v1.0



		#合并分支 merge



		#合并指定分支到当前分支
		git merge [branch]

			一个分支上的提交可以合并到另一个分支
			注意：若想将A合并到B上，需要先切换到B分支，一般都是把别的分支合并到master主分支上
			合并后的代码，本身就是版本合并，合并完还是一个版本，不需要commit，commit是空的，只需要push

eq:
					create file1.go
	------------------------------------------->master
					|
					|
					--------------------dev
						create file2.go

$ git branch
* master

$ touch file1.go
$ git add .
$ git commit -m "create file file1.go"
#创建并切换到dev分支
$ git checkout -b dev
$ touch file2.go
$ git add .
$ git commit -m "create file file2.go"


					create file1.go
	------------------------------------------->master
					|						 ↗
					|						/  合并  merge
					--------------------dev
						create file2.go

#把dev分支合并到master分支

#先切换到master分支
$ git checkout master
#合并
$ git merge dev

#已经合并完毕，查看日志
$ git-log
....



		#删除分支
			不能删除当前分支，只能删除其他分支


		#删除分支
		#删除分支时，需要做各种检查（比如该分支commit但是没有merge）
		git branch -d [branch-name]

		#不做任何检查，强制删除
		git branch -D [branch-name]


eq:

Administrator@DESKTOP-3PM2NVG MINGW64 /d/G-workSpace/golang/src/git_study2022 (master)
$ git checkout -b dev
Switched to a new branch 'dev'

Administrator@DESKTOP-3PM2NVG MINGW64 /d/G-workSpace/golang/src/git_study2022 (dev)
$ git branch
* dev
  master

Administrator@DESKTOP-3PM2NVG MINGW64 /d/G-workSpace/golang/src/git_study2022 (dev)
$ touch f1.go

Administrator@DESKTOP-3PM2NVG MINGW64 /d/G-workSpace/golang/src/git_study2022 (dev)
$ git add .

Administrator@DESKTOP-3PM2NVG MINGW64 /d/G-workSpace/golang/src/git_study2022 (dev)
$ git commit -m "dev create file f1.go"
[dev c8a2085] dev create file f1.go
 11 files changed, 563 insertions(+)


Administrator@DESKTOP-3PM2NVG MINGW64 /d/G-workSpace/golang/src/git_study2022 (dev)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

Administrator@DESKTOP-3PM2NVG MINGW64 /d/G-workSpace/golang/src/git_study2022 (master)
$ git branch
  dev
* master

Administrator@DESKTOP-3PM2NVG MINGW64 /d/G-workSpace/golang/src/git_study2022 (master)
$ git branch -d dev
#删除分支时，需要做各种检查（比如该分支commit但是没有merge）
error: The branch 'dev' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev'.











		#分支冲突


		当两个分支上对文件的修改可能会存在冲突，例如同时修改了同一个文件的同一行，这时就需要手动解决冲突，解决冲突步骤如下
		1.处理文件中冲突的地方
		2.将解决完冲突的文件加入暂存区(add)
		3.提交到仓库(commit)




		#本地分支和远程分支


		本地分支与远程分支的关联关系

		#查看关联关系使用
		git branch -vv

		# 从远程仓库克隆(clone)
		git clone <仓库路径> [本地目录]
			本地目录可以省略，会自动生成一个目录

		# 从远程仓库中抓取(fetch)
		git fetch [remote name] [branch name]
			抓取指令就是将仓库里的[branch name]分支的更新都抓取到本地，不会进行合并
			如果不指定远端名称和分支名，则抓取所有分支。

		#从远程仓库中拉取(pull)
		git pull [remote name] [branch name]
			拉取指令就是将远端仓库的修改拉到本地并自动进行合并，等同于fetch+merge
			如果不指定远端名称和分支名，则抓取所有并更新当前分支。


		#删除远程分支
		git push origin --delete [branch-name]
		git branch -dr [remote/branch]


		本地分支与远程分支的关联关系






开发中分支使用原则与流程
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能，以免影响开发主线。

在开发中，一般有如下分支使用原则与流程：

master （生产） 分支
线上分支，主分支，中小规模项目作为线上运行的应用对应的分支；

develop（开发）分支
是从master创建的分支，一般作为开发部门的主要开发分支，如果没有其他并行开发不同期上线要求，都可以在此版本进行开发，阶段开发完成后，需要是合并到master分支,准备上线。

feature/xxxx分支
从develop创建的分支，一般是同期并行开发，但不同期上线时创建的分支，分支上的研发任务完成后合并到develop分支。

hotfix/xxxx分支，
从master派生的分支，一般作为线上bug修复使用，修复完成后需要合并到master、test、develop分支。

还有一些其他分支，在此不再详述，例如test分支（用于代码测试）、pre分支（预上线分支）等等

*/